/**
 * 考试测试相关类型定义
 * 包含题目、考试记录、统计等类型
 */

import { QuestionType, DifficultyLevel, ExamStatus } from '../common/enums';

/**
 * 题目选项
 */
export interface QuestionOption {
  id?: string; // 选项ID
  questionId?: string; // 题目ID
  optionCode: string; // 选项编码 A,B,C,D
  optionText: string; // 选项文本
  isCorrect: number; // 0: 错误, 1: 正确
  sortOrder?: number; // 排序
  creator?: string; // 创建者
  modifier?: string; // 修改者
  modifyTime?: string; // 修改时间
  version?: number; // 版本
  deleted?: string; // 删除标记
  createTime?: string; // 创建时间
}

/**
 * 测试题目
 */
export interface Question {
  id: number;
  techCode: string; // 所属技术栈ID
  categoryCode: string; 
  type: QuestionType; // 题目类型：单选、多选、判断
  difficulty: DifficultyLevel; // 难度级别：简单、中等、困难
  category: string; // 知识点分类
  question: string; // 题目
  options: QuestionOption[]; // 选项
  explanation: string; // 解析
  code?: string; // 代码示例（可选）
  answer?: string[]; // 正确答案（从options中提取，用于兼容）
  // 后端返回的额外字段
  creator?: string; // 创建者
  modifier?: string; // 修改者
  modifyTime?: string; // 修改时间
  version?: number; // 版本
  deleted?: string; // 删除标记
  createTime?: string; // 创建时间
}

/**
 * 测试记录主表
 * 用于持久化保存测试结果统计信息
 */
export interface ExamRecord {
  id: number; // 记录ID
  userId?: string; // 用户ID（预留）
  techCode: string; // 技术栈编码
  techName: string; // 技术栈名称
  categories: string; // 测试分类编码（逗号分隔）
  categoryNames: string; // 分类名称（逗号分隔）
  totalCount: number; // 总题数
  correctCount: number; // 正确数
  wrongCount: number; // 错误数
  accuracy: number; // 正确率（百分比，如85.50）
  score: number; // 得分
  totalScore: number; // 总分（固定100）
  timeUsed: number; // 用时（秒）
  easyCount: number; // 简单题数量
  easyCorrect: number; // 简单题正确数
  mediumCount: number; // 中等题数量
  mediumCorrect: number; // 中等题正确数
  hardCount: number; // 困难题数量
  hardCorrect: number; // 困难题正确数
  singleCount: number; // 单选题数量
  singleCorrect: number; // 单选题正确数
  multipleCount: number; // 多选题数量
  multipleCorrect: number; // 多选题正确数
  examStatus: ExamStatus; // 测试状态
  createTime: string; // 创建时间
  createTimeStr?: string; // 创建时间字符串（格式化后）
}

/**
 * 测试记录明细表
 * 用于保存具体的题目答题情况
 */
export interface ExamRecordDetail {
  id: number; // 明细ID
  examRecordId: number; // 关联的测试记录ID
  questionId: number; // 题目ID
  questionText: string; // 题目内容（冗余存储）
  questionType: QuestionType; // 题目类型
  difficulty: DifficultyLevel; // 难度
  categoryCode: string; // 分类编码
  categoryName: string; // 分类名称
  userAnswer: string[]; // 用户答案（JSON数组格式）
  correctAnswer: string[]; // 正确答案（JSON数组格式）
  isCorrect: boolean; // 是否正确
  questionOrder: number; // 题目顺序
}

/**
 * 用户答题记录
 */
export interface UserAnswer {
  questionId: number;
  userAnswer: string[]; // 用户答案
  isCorrect: boolean; // 是否正确
  timeUsed: number; // 答题用时（秒）
}

/**
 * 保存考试记录API参数
 */
export interface SaveExamRecordParams {
  techCode: string;
  techName: string;
  categories: string;
  categoryNames: string;
  totalCount: number;
  correctCount: number;
  wrongCount: number;
  timeUsed: number;
  score: number;
  accuracy: number;
  easyCount: number;
  easyCorrect: number;
  mediumCount: number;
  mediumCorrect: number;
  hardCount: number;
  hardCorrect: number;
  singleCount: number;
  singleCorrect: number;
  multipleCount: number;
  multipleCorrect: number;
  examStatus: ExamStatus;
  details: Array<{
    questionId: number;
    questionText: string;
    questionType: QuestionType;
    difficulty: DifficultyLevel;
    categoryCode: string;
    categoryName: string;
    userAnswer: string[];
    correctAnswer: string[];
    isCorrect: boolean;
    questionOrder: number;
  }>;
}

/**
 * 考试记录统计信息
 */
export interface ExamStatistics {
  totalCount: number;      // 总测试次数
  averageScore: number;    // 平均分数
  bestScore: number;       // 最高分数
  averageAccuracy: number; // 平均正确率
}
